// app/utils/logger.js
const colors = require('colors');
const fs = require('fs');
const path = require('path');
const { app } = require('electron');
const dateTime = require('@utils/dateTime');

// 获取 userData 目录
const userDataPath = app.getPath('userData');
const logsDir = path.join(userDataPath, 'logs');

// 确保 logs 目录存在
if (!fs.existsSync(logsDir)) {
    fs.mkdirSync(logsDir);
}


// 日志文件路径
const logFilePath = path.join(logsDir, `${dateTime.getCurrentDate()}.log`);

// 日志函数
function log(tips, message, level = 'INFO') {


    // console.log(tips, message);

    if (!message) {
        message = tips;
    } else {
        // 判断 message 是否为字符串
        if (typeof message !== 'string') {

            // 如果是对象或数组，使用 JSON.stringify 转换
            if (typeof message === 'object' && message !== null) {
                message = tips + JSON.stringify(message, null, 2); // 美化输出，缩进2空格

            } else {
                // 其他类型（如数字、布尔值等）直接转换为字符串

                message = tips + String(message);
            }
        } else {
            message = tips + String(message);
        }
    }

    const timestamp = new Date().toISOString();
    const logMessage = `[${timestamp}] [${level}] ${message}\n`;

    colorOutput(logMessage, level); // 输出到控制台

    // 写入日志文件
    fs.appendFile(logFilePath, logMessage, (err) => {
        if (err) {
            console.error('[+10031]【写入日志文件】失败：', err);
        }
    });
}

function colorOutput(msg, level = 'INFO') {
    switch (level) {
        case 'WARN':
            console.log(`${msg}`.bgYellow);
            break;
        case 'ERROR':
            console.log(`${msg}`.bgRed);
            break;
        default:
            console.log(`${msg}`.bgBlue);
    }

}

module.exports = {
    log,
    info: (tips, message) => log(tips, message, 'INFO'),
    warn: (tips, message) => log(tips, message, 'WARN'),
    error: (tips, message) => log(tips, message, 'ERROR'),
};
